package org.nnxy.foodboot.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.nnxy.foodboot.entity.RecipeSimilarity;

import java.math.BigDecimal;
import java.util.List;

/**
 * 食谱相似度服务接口
 */
public interface RecipeSimilarityService extends IService<RecipeSimilarity> {
    
    /**
     * 获取两个食谱之间的相似度
     * @param recipeId1 食谱ID1
     * @param recipeId2 食谱ID2
     * @return 相似度实体
     */
    RecipeSimilarity getSimilarityBetweenRecipes(Integer recipeId1, Integer recipeId2);
    
    /**
     * 创建或更新两个食谱之间的相似度
     * @param recipeId1 食谱ID1
     * @param recipeId2 食谱ID2
     * @param contentSimilarity 内容相似度
     * @param tasteSimilarity 口味相似度
     * @param nutritionSimilarity 营养相似度
     * @param ingredientSimilarity 食材相似度
     * @return 是否成功
     */
    boolean saveOrUpdateSimilarity(Integer recipeId1, Integer recipeId2, 
                                  BigDecimal contentSimilarity, BigDecimal tasteSimilarity,
                                  BigDecimal nutritionSimilarity, BigDecimal ingredientSimilarity);
    
    /**
     * 计算综合相似度
     * @param contentSimilarity 内容相似度
     * @param tasteSimilarity 口味相似度
     * @param nutritionSimilarity 营养相似度
     * @param ingredientSimilarity 食材相似度
     * @return 综合相似度
     */
    BigDecimal calculateOverallSimilarity(BigDecimal contentSimilarity, BigDecimal tasteSimilarity,
                                         BigDecimal nutritionSimilarity, BigDecimal ingredientSimilarity);
    
    /**
     * 获取与指定食谱最相似的食谱ID列表
     * @param recipeId 食谱ID
     * @param limit 限制数量
     * @return 食谱ID列表
     */
    List<Integer> getSimilarRecipeIds(Integer recipeId, Integer limit);
    
    /**
     * 获取与指定食谱口味最相似的食谱ID列表
     * @param recipeId 食谱ID
     * @param limit 限制数量
     * @return 食谱ID列表
     */
    List<Integer> getSimilarTasteRecipeIds(Integer recipeId, Integer limit);
    
    /**
     * 获取与指定食谱营养最相似的食谱ID列表
     * @param recipeId 食谱ID
     * @param limit 限制数量
     * @return 食谱ID列表
     */
    List<Integer> getSimilarNutritionRecipeIds(Integer recipeId, Integer limit);
} 